<?php
/**
 * 9、设计模式学习-外观模式
 * 天气控制器
 * 2019年12月11日11:52:12
 */
namespace Application\Controller;

use Application\Common\Facade\Cloud as Cloud;
use Application\Common\Facade\Wind as Wind;
use Application\Common\Facade\WeatherFacade as WeatherFacade;

class WeatherFacadeController extends BaseController
{
    // 没有使用外观模式 获取 阴晴、风级
    public function noUseFacade()
    {
        $weather = array();
        $weather['cloud'] = (new Cloud) -> getCurrentLevel();
        $weather['wind'] = (new Wind) -> getCurrentLevel();
        echo '当前的天气信息为：';
        export($weather);
        // 总结：子系统 Cloud、Wind 没有隐藏细节，与客户端耦合较为紧密，不利于后续对于 getCurrentLevel 的更新与维护
    }
    // 使用外观模式 获取 阴晴、风级
    public function useFacade()
    {
        $weathers = array();
        $weathers['cloud'] = new Cloud();
        $weathers['wind'] = new Wind();
        $weather_facade = new WeatherFacade($weathers);
        $weather = $weather_facade -> getCurrentLevel();
        echo '当前的天气信息为：';
        export($weather);
        // 总结：使用了外观模式，子系统的相关细节隐藏到了门面层中，使得子系统与客户端解耦，降低了复杂度；同时利用门面层实现其他需求更为灵活
    }
    # 备注：外观模式又叫门面模式
}
